package com.dhcc.bpm.modules.api.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dhcc.bpm.modules.api.entity.Api;
import com.dhcc.bpm.modules.api.vo.ApiListVo;
import com.dhcc.bpm.modules.api.vo.ApiPageVO;
import com.dhcc.bpm.modules.api.vo.ApiVO;
import com.dhcc.bpm.modules.api.vo.ListAllApisVO;
import com.dhcc.bpm.modules.common.vo.SelectVo;
import com.dhcc.bpm.modules.log.vo.AppApiViewVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @ClassName ApiMapper
 * @Description api表 Mapper 接口
 * @Author daina
 * @Date 2020/2/25 16:02
 * @Version V1.0
 * @Copyright: 2020 东华软件 . All rights reserved.
 */
public interface ApiMapper extends BaseMapper<Api> {

	/**
	 * @param page
	 * @param api
	 * @return java.util.List<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @Description 自定义分页
	 * @Author daina
	 * @Date 11:20 2020/4/3
	 **/
	List<ApiVO> selectApiPage(IPage page, ApiVO api);

	List<SelectVo> selectApiName();

	/**
	 * @param backserviceId
	 * @return java.util.List<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @Description 根据基础产品id查询
	 * @Author daina
	 * @Date 11:19 2020/4/3
	 **/
	List<ApiVO> listByBackserviceId(Long backserviceId);

	/**
	 * @param page
	 * @param api
	 * @return java.util.List<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @Description 根据产品id查询
	 * @Author daina
	 * @Date 11:20 2020/4/3
	 **/
	List<ApiVO> listByProductId(IPage page, ApiVO api);

	List<ApiVO> selectApiList(ApiVO api);

	/**
	 * @param page
	 * @param api
	 * @return java.util.List<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @Description 查询列表信息
	 * @Description 查询列表信息
	 * @Author daina
	 * @Date 11:20 2020/4/3
	 **/
	List<ApiVO> listInfo(IPage page, ApiVO api);

	/**
	 * @author: 陈泽
	 * @date: 2019/12/13 18:25
	 * @description: 根据产品编号查询接口
	 * @param: [id]
	 * @return: java.util.List<com.dhcc.bpm.modules.api.entity.Api>
	 */
	List<ApiVO> selectByProductId(IPage page, ApiVO apivo);

	/**
	 * @author: 陈泽
	 * @date: 2019/12/13 18:25
	 * @description: 根据产品编号查询接口
	 * @param: [id]
	 * @return: java.util.List<com.dhcc.bpm.modules.api.entity.Api>
	 */
	List<ApiVO> getApiByProductId(IPage page, ApiVO apivo);

	List<ApiVO> getApiByAppId(IPage page, ApiVO apivo);

	List<ApiVO> getCostApiByProductId(IPage page, ApiVO apivo);


	/**
	 * 查询访问控制接口列表
	 *
	 * @param page api
	 * @return
	 */
	IPage<ApiVO> selectControllerPage(IPage<ApiVO> page, ApiVO api);

	/**
	 * 查询未分配的访问控制接口列表
	 *
	 * @param page
	 * @param api
	 * @return
	 */
	List<ApiVO> selectUnControllerApiList(IPage<ApiVO> page, ApiVO api);

	/**
	 * 查询网关参数接口列表
	 *
	 * @param page api
	 * @return
	 */
	IPage<ApiVO> selectProductApiList(IPage<ApiVO> page, ApiVO api);

	IPage<ApiVO> selectBaseProductApiList(IPage<ApiVO> page, ApiVO api);

	/**
	 * 查询网关参数接口列表
	 *
	 * @param page api
	 * @return
	 */
	IPage<ApiVO> selectSysApiList(IPage<ApiVO> page, ApiVO api);

	/**
	 * 查询应用接口列表
	 *
	 * @param page
	 * @return appApiVO
	 */
	IPage<AppApiViewVo> selectAppApiList(IPage<AppApiViewVo> page, AppApiViewVo app);


	/**
	 * 根据产品id查询接口
	 *
	 * @param page
	 * @param api
	 * @return
	 */
	List<ApiVO> getApiListByProductId(IPage<ApiVO> page, ApiVO api);

	/**
	 * 根据实例id查询接口
	 *
	 * @param page
	 * @param api
	 * @return
	 */
	List<ApiVO> getApiListByCaseId(IPage<ApiVO> page, ApiVO api);

	/**
	 * 根据实例id查询接口数量
	 *
	 * @param appCode
	 * @return
	 */
	int selectApiCountById(@Param("appCode") String appCode);

	/**
	 * 产品下api集合
	 *
	 * @param page
	 * @param app
	 * @return
	 */
	List<AppApiViewVo> selectProApiList(IPage<AppApiViewVo> page, AppApiViewVo app);

	/**
	 * 根据应用id查询接口
	 *
	 * @param page
	 * @param api
	 * @return
	 */
	List<ApiVO> getApiListByAppId(IPage<ApiVO> page, ApiVO api);

	/**
	 * @param ids
	 * @return java.util.List<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @Description 根据apiIds获得批量接口列表
	 * @Date 2020/2/21 23:23
	 **/
	List<ApiVO> getListByIds(@Param("ids") List<Long> ids);

	/**
	 * @param apiId
	 * @return com.dhcc.bpm.modules.api.vo.ApiListVo
	 * @Description TODO
	 * @Author sjm
	 * @Date 18:26 2020/2/27 0027
	 **/
	ApiListVo selectApiVoById(Long apiId);

	/**
	 * @param apiCode
	 * @return com.dhcc.bpm.modules.api.vo.ApiListVo
	 * @Description 查询api
	 * @Author daina
	 * @Date 19:05 2020/4/16
	 **/
	ApiListVo selectByApiCode(String apiCode);

	/*
	 * @Description
	 * @Author xushuaize
	 * @Date 14:49 2020/3/10
	 * @param api
	 * @return java.lang.Boolean
	 **/
	Boolean updateApiWithTransformProtocol(Api api);

	/**
	 * @param id
	 * @return java.util.List<com.dhcc.bpm.modules.api.entity.Api>
	 * @Description 根据渠道id查询接口
	 * @Author sjm
	 * @Date 11:28 2020/3/13 0013
	 **/
	List<Api> selectApiByAppId(Long id);

	/**
	 * @param apiNum
	 * @return java.util.List<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @throws
	 * @Description 编码判断是否重复
	 * @Author xiafayu
	 * @Date 2020/3/21 20:18
	 **/
	List<ApiVO> selectBySysNum(String apiNum);

	/**
	 * @param page
	 * @param api
	 * @return com.baomidou.mybatisplus.core.metadata.IPage<com.dhcc.bpm.modules.api.vo.ApiVO>
	 * @Description 某一api下回调地址列表
	 * @Author Mdd
	 * @Date 2020/4/10 15:12
	 **/
	List<ApiVO> callBackList(IPage<ApiVO> page, ApiVO api);

	/**
	 * @return int
	 * @Description 刷新网关路由
	 **/
	int updateRefreshStatus(ApiVO api);

	List<ListAllApisVO> listAllApis();

	List<Api> getProdApiByProductId(Long productId);

	List<Long> getProdApiIdsByProductId(Long productId);

	List<String> getApiBySysId(Long sysId);

	List<Long> getApiIdsBySysId(String sysId);

	/**
	 * 根据产品id查询接口
	 *
	 * @param productId
	 * @return
	 */
	List<ApiVO> getListByProductId(@Param("productId") Long productId);

	/**
	 * 根据产品id查询接口
	 *
	 * @param productId
	 * @return
	 */
	List<ApiVO> findApiByProductId(@Param("productId") Long productId);

	List<ApiPageVO> selectPage(IPage<ApiPageVO> page, ApiVO api);

}
